#ifndef _BOOM_ENTITY_H_
#define _BOOM_ENTITY_H_

#include "BoomData.h"
#include "AbstractEntity.h"
#include "EffectManager.h"

#define GRAVITY  -9.8f
#define ANGLE  90
#define Vo 20.0f

#define TIME  80

class BoomEntity : public AbstractEntity
{
private:
	BoomData* _data;
	int _count;
	int _time;
	double _x0;
	double _y0;
	bool _isInteract;

	bool isFired;

	//************************************
	// Method:    _fire
	// FullName:  BoomEntity::_fire
	// Access:    private 
	// Returns:   void
	// Qualifier:
	// Parameter: double x
	// Parameter: double y
	//************************************
	void _fire(double x, double y);

	//************************************
	// Method:    _recreate
	// FullName:  BoomEntity::_recreate
	// Access:    private 
	// Returns:   void
	// Qualifier:
	//************************************
	void _recreate();
public:
	//************************************
	// Method:    BoomEntity
	// FullName:  BoomEntity::BoomEntity
	// Access:    public 
	// Returns:   
	// Qualifier:
	// Parameter: int id
	// Parameter: int type
	// Parameter: double x
	// Parameter: double y
	//************************************
	BoomEntity(int id, int type, double x, double y);

	//************************************
	// Method:    update
	// FullName:  BoomEntity::update
	// Access:    virtual public 
	// Returns:   void
	// Qualifier:
	// Parameter: long time
	//************************************
	virtual void update(long time);

	//************************************
	// Method:    draw
	// FullName:  BoomEntity::draw
	// Access:    virtual public 
	// Returns:   void
	// Qualifier:
	// Parameter: long time
	//************************************
	virtual void draw(long time);

	//************************************
	// Method:    getAbstractData
	// FullName:  BoomEntity::getAbstractData
	// Access:    virtual public 
	// Returns:   AbstractData*
	// Qualifier:
	//************************************
	virtual AbstractData* getAbstractData();

	//************************************
	// Method:    updateData
	// FullName:  BoomEntity::updateData
	// Access:    virtual public 
	// Returns:   void
	// Qualifier:
	// Parameter: int actions
	// Parameter: int effect
	//************************************
	virtual void updateData(int actions, int effect);

	//************************************
	// Method:    ~BoomEntity
	// FullName:  BoomEntity::~BoomEntity
	// Access:    public 
	// Returns:   
	// Qualifier:
	//************************************
	~BoomEntity();

};

#endif